what is sql injection attack

 what is sql injection attack

एसक्यूएल इंजेक्शन एक कोड इंजेक्शन तकनीक है, जिसका उपयोग डेटा-चालित अनुप्रयोगों पर हमला करने के लिए किया जाता है, जिसमें दुर्भावनापूर्ण एसक्यूएल बयानों को निष्पादन के लिए एक प्रवेश क्षेत्र में डाला जाता है (उदाहरण के लिए, डेटाबेस सामग्री को हमलावर को डंप करने के लिए)। [१] SQL इंजेक्शन को किसी एप्लिकेशन के सॉफ़्टवेयर में सुरक्षा भेद्यता का शोषण करना चाहिए, उदाहरण के लिए, जब उपयोगकर्ता इनपुट SQL कथन में एम्बेडेड स्ट्रिंग शाब्दिक एस्केप वर्णों के लिए गलत तरीके से फ़िल्टर किया जाता है या उपयोगकर्ता इनपुट को दृढ़ता से टाइप नहीं किया जाता है और अप्रत्याशित रूप से निष्पादित किया जाता है। SQL इंजेक्शन ज्यादातर वेबसाइटों के लिए एक हमले वेक्टर के रूप में जाना जाता है, लेकिन इसका उपयोग किसी भी प्रकार के SQL डेटाबेस पर हमला करने के लिए किया जा सकता है।



SQL इंजेक्शन के हमले हमलावरों को पहचान को बिगाड़ने, मौजूदा डेटा के साथ छेड़छाड़ करने, शून्य लेन-देन या बैलेंस बदलने जैसे मुद्दों का कारण बनाते हैं, सिस्टम पर सभी डेटा का पूर्ण प्रकटीकरण करने, डेटा को नष्ट करने या अन्यथा अनुपलब्ध होने की अनुमति देते हैं, और प्रशासक बन जाते हैं। डेटाबेस सर्वर।


2012 के एक अध्ययन में, यह देखा गया कि औसत वेब एप्लिकेशन को प्रति माह 4 हमले अभियान मिले, और खुदरा विक्रेताओं ने अन्य उद्योगों की तुलना में दो बार हमले किए। [2]

what is sql injection attack

इतिहास

SQL इंजेक्शन की पहली सार्वजनिक चर्चा 1998 के आसपास दिखाई देने लगी; [3] उदाहरण के लिए, 1998 में Phrack मैगज़ीन में एक लेख। [4]


प्रपत्र

SQL इंजेक्शन (SQLI) को ओपन वेब एप्लीकेशन सिक्योरिटी प्रोजेक्ट द्वारा 2007 और 2010 की शीर्ष 10 वेब एप्लिकेशन भेद्यताओं में से एक माना गया था। [5] 2013 में, SQLI को OWASP टॉप टेन पर नंबर एक हमले का दर्जा दिया गया था। [6] SQL इंजेक्शन के चार मुख्य उप-वर्ग हैं:


क्लासिक SQLI

Blind  इंजेक्शन SQL इंजेक्शन

डेटाबेस प्रबंधन प्रणाली-विशिष्ट SQLI

compound sql

एसक्यूएल इंजेक्शन + अपर्याप्त प्रमाणीकरण

SQL इंजेक्शन + DDoS हमले 

एसक्यूएल इंजेक्शन + डीएनएस अपहरण 

SQL इंजेक्शन + XSS 

स्टॉर्म वर्म कम्पाउंडेड SQLI का एक प्रतिनिधित्व है। 



यह वर्गीकरण SQLI की स्थिति का प्रतिनिधित्व करता है, 2010 तक इसके विकास का सम्मान करता है - आगे शोधन चल रहा है।


तकनीकी कार्यान्वयन

गलत तरीके से फ़िल्टर किए गए एस्केप वर्ण

इंजेक्शन का यह रूप तब होता है जब उपयोगकर्ता इनपुट एस्केप वर्णों के लिए फ़िल्टर नहीं किया जाता है और फिर SQL कथन में पास किया जाता है। यह एप्लिकेशन के अंतिम-उपयोगकर्ता द्वारा डेटाबेस पर किए गए बयानों के संभावित हेरफेर का परिणाम है।


कोड की निम्न पंक्ति इस भेद्यता को दर्शाती है:


कथन = "उपयोगकर्ताओं से चयन करें * जहां से नाम = '" + उपयोगकर्ता नाम + ";"

यह SQL कोड अपने उपयोगकर्ताओं की तालिका से निर्दिष्ट उपयोगकर्ता नाम के रिकॉर्ड को खींचने के लिए बनाया गया है। हालाँकि, यदि "userName" वैरिएबल को किसी दुर्भावनापूर्ण उपयोगकर्ता द्वारा विशिष्ट तरीके से तैयार किया गया है, तो SQL स्टेटमेंट कोड लेखक से अधिक हो सकता है। उदाहरण के लिए, "userName" वैरिएबल को इस रूप में सेट करना:


'या' 1 '=' 1

या टिप्पणियों को शेष क्वेरी को ब्लॉक करने के लिए (तीन प्रकार के SQL टिप्पणियाँ [13]) हैं। सभी तीन लाइनों के अंत में एक स्थान है:


'या' 1 '=' 1 '-

'या' 1 '=' 1 '{

'या' 1 '=' 1 '/ *

मूल भाषा द्वारा निम्नलिखित SQL कथनों में से एक का प्रतिपादन करता है:


चयन करें * उपयोगकर्ताओं से जहां नाम = '' या '1' = '1';

चयन करें * उपयोगकर्ताओं से जहां नाम = '' या '1' = '1' - ';



यदि इस कोड को प्रमाणीकरण प्रक्रिया में उपयोग किया जाना था, तो इस उदाहरण का उपयोग सभी उपयोगकर्ताओं के प्रत्येक डेटा फ़ील्ड (*) को एक विशिष्ट उपयोगकर्ता नाम के बजाय कोडर के रूप में करने के लिए मजबूर करने के लिए किया जा सकता है, क्योंकि '1' = का मूल्यांकन '1' हमेशा सत्य होता है।


नीचे दिए गए कथन में "userName" का निम्न मान "उपयोगकर्ता" तालिका को हटाने के साथ-साथ "userinfo" तालिका से सभी डेटा के चयन का कारण होगा (संक्षेप में प्रत्येक उपयोगकर्ता की जानकारी का खुलासा), एक एपीआई का उपयोग करके कई बयान देता है:


a; DROP टेबल उपयोगकर्ता; चयन करें * उपयोगकर्ता से जहां 'टी' = 'टी

यह इनपुट अंतिम एसक्यूएल स्टेटमेंट को निम्नानुसार और निर्दिष्ट करता है:


चयन करें * उपयोगकर्ताओं से जहां नाम = 'ए' है, उपयोगकर्ताओं को रोकें; चयन करें * उपयोगकर्ता से जहां 'टी' = 'टी';

जबकि अधिकांश SQL सर्वर कार्यान्वयन कई बयानों को इस तरह से एक कॉल के साथ निष्पादित करने की अनुमति देते हैं, कुछ SQL APIs जैसे PHP के mysql_query () फ़ंक्शन सुरक्षा कारणों से इसकी अनुमति नहीं देते हैं। यह हमलावरों को पूरी तरह से अलग प्रश्नों को इंजेक्शन लगाने से रोकता है, लेकिन उन्हें प्रश्नों को संशोधित करने से नहीं रोकता है।


ब्लाइंड SQL इंजेक्शन

ब्लाइंड SQL इंजेक्शन का उपयोग तब किया जाता है जब कोई वेब अनुप्रयोग SQL इंजेक्शन के लिए असुरक्षित होता है लेकिन हमलावर को इंजेक्शन के परिणाम दिखाई नहीं देते हैं। भेद्यता वाला पृष्ठ डेटा प्रदर्शित करने वाला एक नहीं हो सकता है, लेकिन उस पृष्ठ के लिए कहे गए वैध एसक्यूएल बयान में इंजेक्ट किए गए तार्किक विवरण के परिणामों के आधार पर अलग-अलग प्रदर्शित करेगा। इस प्रकार के हमले को परंपरागत रूप से समय-गहन माना जाता है क्योंकि प्रत्येक बिट के बरामद किए जाने के लिए एक नए बयान की आवश्यकता होती है, और इसकी संरचना के आधार पर, हमले में कई असफल अनुरोध शामिल हो सकते हैं। हाल की प्रगति ने प्रत्येक अनुरोध को कई बिट्स को पुनर्प्राप्त करने की अनुमति दी है, जिसमें कोई असफल अनुरोध नहीं है, अधिक सुसंगत और कुशल निष्कर्षण की अनुमति देता है। [१४] कई उपकरण हैं जो भेद्यता और लक्ष्य जानकारी के स्थान पर एक बार इन हमलों को स्वचालित कर सकते हैंrmation की स्थापना की गई है। [१५]


सशर्त प्रतिक्रियाएं

एक प्रकार का अंधा एसक्यूएल इंजेक्शन डेटाबेस को एक साधारण एप्लिकेशन स्क्रीन पर एक तार्किक कथन का मूल्यांकन करने के लिए मजबूर करता है। एक उदाहरण के रूप में, एक पुस्तक समीक्षा वेबसाइट क्वेरी स्ट्रिंग का उपयोग करके यह निर्धारित करती है कि किस पुस्तक समीक्षा को प्रदर्शित किया जाए। इसलिए URL https://books.example.com/review?id=5 सर्वर को क्वेरी चलाने का कारण बनेगा


चयन करें * बुकरेव्यू से जहां आईडी = '5';

जिसमें से यह तालिका बुकरेव्यू में संग्रहीत आईडी 5 के साथ समीक्षा के डेटा के साथ समीक्षा पृष्ठ को पॉप्युलेट करेगा। क्वेरी पूरी तरह से सर्वर पर होती है; उपयोगकर्ता डेटाबेस, तालिका, या फ़ील्ड्स के नाम नहीं जानता, न ही उपयोगकर्ता क्वेरी स्ट्रिंग जानता है। उपयोगकर्ता केवल यह देखता है कि उपरोक्त URL एक पुस्तक समीक्षा लौटाता है। एक हैकर URL को https://books.example.com/review?id=5 या 1 = 1 और https://books.example.com/review?id=5 और 1 = 2 पर लोड कर सकता है, जिसके परिणामस्वरूप हो सकता है प्रश्नों


चयन करें * बुकरेव्यू से जहां ID = '5' या '1' = '1';

चयन करें * बुकरेव्यू से जहां ID = '5' और '1' = '2';

क्रमशः। यदि मूल समीक्षा "1 = 1" URL के साथ लोड होती है और रिक्त या त्रुटि पृष्ठ "1 = 2" URL से लौटाया जाता है, और उपयोगकर्ता को इनपुट अमान्य है, या अन्य में चेतावनी देने के लिए लौटा पृष्ठ नहीं बनाया गया है शब्द, एक इनपुट परीक्षण स्क्रिप्ट द्वारा पकड़ा गया है, साइट संभवतः SQL इंजेक्शन हमले के लिए असुरक्षित है क्योंकि क्वेरी संभवतः दोनों मामलों में सफलतापूर्वक पारित हो जाएगी। सर्वर पर चल रहे MySQL के संस्करण संख्या को प्रकट करने के लिए डिज़ाइन किए गए इस क्वेरी स्ट्रिंग के साथ हैकर आगे बढ़ सकता है: https://books.example.com/review?id=5 और सबरिंग (@@ संस्करण, 1, INSTR (@@) संस्करण , '।') - 1) = 4, जो कि MySQL 4 चलाने वाले सर्वर पर पुस्तक समीक्षा दिखाएगा और अन्यथा एक रिक्त या त्रुटि पृष्ठ होगा। हैकर सीधे अपने लक्ष्य को प्राप्त करने के लिए या हमले के दूसरे अवसर की खोज में सर्वर से अधिक जानकारी प्राप्त करने के लिए क्वेरी स्ट्रिंग के भीतर कोड का उपयोग करना जारी रख सकता है। [१६] [१ to]


दूसरा आदेश SQL इंजेक्शन

दूसरा ऑर्डर SQL इंजेक्शन तब होता है जब सबमिट किए गए मानों में दुर्भावनापूर्ण कमांड होते हैं जो तुरंत निष्पादित होने के बजाय संग्रहीत होते हैं। कुछ मामलों में, एप्लिकेशन सही ढंग से SQL स्टेटमेंट को एनकोड कर सकता है और इसे मान्य SQL के रूप में स्टोर कर सकता है। फिर, SQL इंजेक्शन से बचाने के लिए नियंत्रण के बिना उस एप्लिकेशन का एक और हिस्सा उस संग्रहीत SQL कथन को निष्पादित कर सकता है। इस हमले के लिए अधिक ज्ञान की आवश्यकता है कि कैसे प्रस्तुत मूल्यों का बाद में उपयोग किया जाता है। स्वचालित वेब अनुप्रयोग सुरक्षा स्कैनर आसानी से इस प्रकार के SQL इंजेक्शन का पता नहीं लगा पाएंगे और मैन्युअल रूप से निर्देश देने की आवश्यकता हो सकती है कि सबूत के लिए जाँच कहाँ की जा रही है।


शमन

एसक्यूएल इंजेक्शन एक जाना-माना हमला है और सरल उपायों द्वारा आसानी से रोका जा सकता है। 2015 में टॉकटॉक पर एक स्पष्ट एसक्यूएल इंजेक्शन हमले के बाद, बीबीसी ने बताया कि सुरक्षा विशेषज्ञ इस बात से स्तब्ध थे कि इतनी बड़ी कंपनी इसकी चपेट में आएगी। [१ injection]


खोज

एसक्यूएल इंजेक्शन फ़िल्टरिंग स्पैम फिल्टर को ईमेल करने के लिए इसी तरह से काम करता है। डेटाबेस फ़ायरवॉल होस्ट से अमान्य प्रश्नों की संख्या के आधार पर SQL इंजेक्शन का पता लगाते हैं, जबकि अनुरोध या अन्य के अंदर OR और UNION ब्लॉक हैं। [१ ९]


परिमाणबद्ध कथन

मुख्य लेख: तैयार कथन

अधिकांश विकास प्लेटफार्मों के साथ, पैरामीटर वाले बयान जो पैरामीटर के साथ काम करते हैं, उन्हें बयान में उपयोगकर्ता इनपुट एम्बेड करने के बजाय (कभी-कभी प्लेसहोल्डर या बाइंड चर कहा जाता है) का उपयोग किया जा सकता है। एक प्लेसहोल्डर केवल दिए गए प्रकार के मूल्य को स्टोर कर सकता है और एक मनमाने ढंग से एसक्यूएल टुकड़े को नहीं। इसलिए SQL इंजेक्शन बस एक अजीब (और शायद अमान्य) पैरामीटर मान के रूप में माना जाएगा। कई मामलों में, SQL कथन तय हो गया है, और प्रत्येक पैरामीटर एक स्केलर है, न कि एक तालिका। उपयोगकर्ता इनपुट को तब एक पैरामीटर को सौंपा गया है (बाध्य)। [२०]


आसानी से डाला, पैरामीटर प्रश्नों का उपयोग करके निश्चित रूप से एसक्यूएल इंजेक्शन को रोका जा सकता है। इसका मुख्य रूप से मतलब है कि आपके चर क्वेरी स्ट्रिंग नहीं हैं जो मनमाने ढंग से SQL इनपुट को स्वीकार करेंगे, हालांकि, दिए गए प्रकारों के कुछ पैरामीटर निश्चित रूप से आवश्यक हैं। Parameterized प्रश्नों को डेवलपर को सभी कोड को परिभाषित करने की आवश्यकता होती है। इसलिए, मापदंडों के प्रश्नों के बिना, कोई भी किसी भी प्रकार के SQL कोड को क्षेत्र में रख सकता है, और डेटाबेस को मिटा सकता है। लेकिन यदि मापदंडों को '@username' पर सेट किया गया था, तो व्यक्ति केवल किसी प्रकार के कोड के बिना उपयोगकर्ता नाम रख सकेगा। [२१]


कोडिंग स्तर पर प्रवर्तन

ऑब्जेक्ट-रिलेशनल मैपिंग लाइब्रेरी का उपयोग करने से SQL कोड लिखने की आवश्यकता से बचा जाता है। प्रभाव में ORM पुस्तकालय ऑब्जेक्ट-ओरिएंटेड कोड से पैरामीटर वाले SQL कथन उत्पन्न करेगा।


Ankit raj

helo my name is ankit.

Post a Comment (0)
Previous Post Next Post